home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr08 / ngw13.zip / NGTOOLS.C < prev    next >
C/C++ Source or Header  |  1995-01-15  |  3KB  |  119 lines

  1. #include <vm.api>
  2. #include <ClipApi.h>
  3.  
  4. //----------------------------------------------------------------------------//
  5. // Convert a 2 Bytes String in NG to Word
  6. CLIPPER Ng2Word()
  7. {
  8.  
  9.     unsigned char * str;
  10.         unsigned int retval;
  11.         str     = _parc( 1 );
  12.     retval  = ( ( str[ 1 ] ^ 0x1A ) << 8 ) | ( str[ 0 ] ^ 0x1A ) ;
  13.         _retni( retval );
  14. }
  15.  
  16. //----------------------------------------------------------------------------//
  17. // Convert a 4 Bytes String in NG to Word
  18. CLIPPER Ng2DWord()
  19. {
  20.         unsigned char * str;
  21.     unsigned long retval;
  22.     unsigned long ret1;
  23.         unsigned int ret2;
  24.     str    = _parc( 1 );
  25.     ret1    = ( ( str[ 3 ] ^ 0x1A ) << 8 ) | ( str[ 2 ] ^ 0x1A );
  26.     ret2    = ( ( str[ 1 ] ^ 0x1A ) << 8 ) | ( str[ 0 ] ^ 0x1A );
  27.     retval    = ( ret1 << 16 ) | ret2;
  28.     _retnl( retval );
  29. }
  30.  
  31.   
  32. //----------------------------------------------------------------------------//
  33. // Retrieve the length of a NG String
  34. CLIPPER NgStrLen()
  35. {
  36.     unsigned char * str;
  37.     unsigned int len;
  38.     int retval;
  39.  
  40.     retval     = 0;
  41.     len     = _parclen( 1 );
  42.     str     = _parc( 1 );
  43.     while ( ( ( str[ retval ] ^ 0x1A ) != 0 ) && ( retval < len ) ) 
  44.                 retval ++;
  45.     _retni( retval+1 );
  46. }
  47.  
  48.  
  49. //----------------------------------------------------------------------------//
  50. // Convert a NG String to a Normal String
  51. CLIPPER Ng2String()
  52. {
  53.     unsigned char * dest;
  54.     HANDLE hSegment;
  55.     unsigned char * str;
  56.     unsigned char c;
  57.     unsigned int len;
  58.     unsigned int cpt;
  59.     unsigned int rep;
  60.     unsigned int max;
  61.         unsigned int ret;
  62.  
  63.         cpt     = 0;
  64.         ret     = 0;
  65.     // Maximum size
  66.     if ( hSegment = _xvalloc( 65000, 0) )
  67.     {
  68.         dest = _xvlock( hSegment );
  69.         if ( dest != NULL )
  70.         {
  71.                         str     = _parc( 1 );
  72.                         len     = _parclen( 1 );
  73.             c       = ( str[ cpt ] ^ 0x1A );
  74.             while ( ( c != 0 ) && ( cpt < len ) )
  75.                     {
  76.                         switch ( c )
  77.                         {
  78.                             // Control Character
  79.                                 case '^' :
  80.                                     cpt ++;
  81.                                     // what command ?
  82.                         c       = ( str[ cpt ] ^ 0x1A );
  83.                                     // followed by a coded color on two bytes
  84.                                     if ( ( c == 'A' ) || ( c == 'C' ) )
  85.                             cpt ++;
  86.                                                 cpt++;
  87.                                     break;
  88.                             case 255 :
  89.                                     // repeating spaces, how many ?
  90.                                     cpt ++;
  91.                                     max = ( str[ cpt ] ^ 0x1A );
  92.                                     for (rep=0; rep<max;rep++)
  93.                                     {
  94.                                         dest[ ret ] = 0x20;
  95.                                         ret++;
  96.                                     }
  97.                                     cpt ++;
  98.                                     break;
  99.                                 default  :
  100.                                     // normal char, we copy..
  101.                                     dest[ ret ] = c;
  102.                                     ret ++;
  103.                                     cpt ++;
  104.                                     break;
  105.                 }
  106.                 c       = ( str[ cpt ] ^ 0x1A );
  107.             }
  108.                     _retclen( dest, ret );
  109.             _xvunlock( hSegment );
  110.         }
  111.         else
  112.                     _retc( "" );
  113.         _xvfree( hSegment );
  114.     }
  115.     else
  116.         _retc( "" );
  117. }
  118.  
  119.